package Math;

import org.junit.Test;

import java.math.BigDecimal;

/**
 * @Classname 温度转换2469
 * @Description TODO
 * @Date 2023/3/21 17:04
 * @Created by xjl
 */
public class 温度转换2469 {

    public double[] convertTemperature(double celsius) {
        double[] result = new double[2];
        BigDecimal tmp1 = BigDecimal.valueOf(celsius).add(new BigDecimal(273.15));
        result[0] = Double.valueOf(tmp1.toString());
        BigDecimal tmp2 = BigDecimal.valueOf(celsius).multiply(new BigDecimal(1.80)).add(new BigDecimal(32.00));
        result[1] = Double.valueOf(tmp2.toString());
        return result;
    }

    @Test
    public void test() {
        System.out.println(0.3 - 0.1);
        System.out.println(BigDecimal.valueOf(0.3).subtract(new BigDecimal(0.1)));
    }

    /**
     * 四舍五入
     *
     * @param v     需要四舍五入的数字
     * @param scale 小数点后保留几位
     * @return
     */
    public static double round(double v, int scale) {
        if (scale < 0) {
            throw new IllegalArgumentException("The scale must be a positive integer or zero");
        }
        BigDecimal b = new BigDecimal(Double.toString(v));
        BigDecimal one = new BigDecimal("1");
        return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /**
     * 两个double相加
     *
     * @param v1    被加数
     * @param v2    加数
     * @param scale 保留几位小数
     * @return
     */
    public static double add(Double v1, Double v2, int scale) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1 == null ? 0.0 : v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2 == null ? 0.0 : v2));
        return round(b1.add(b2).doubleValue(), scale);
    }

    /**
     * 3个double相加
     *
     * @param v1
     * @param v2
     * @param v3
     * @param scale
     * @return
     */
    public static double add(Double v1, Double v2, Double v3, int scale) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1 == null ? 0.0 : v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2 == null ? 0.0 : v2));
        BigDecimal b3 = new BigDecimal(Double.toString(v3 == null ? 0.0 : v3));
        BigDecimal b = b1.add(b2);
        return round(b.add(b3).doubleValue(), scale);
    }

    /**
     * 两个double相减
     *
     * @param v1    被减数
     * @param v2    减数
     * @param scale 保留几位小数
     * @return
     */
    public static double sub(double v1, double v2, int scale) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return round(b1.subtract(b2).doubleValue(), scale);
    }

    /**
     * double*double
     *
     * @param v1    被乘数
     * @param v2    乘数
     * @param scale
     * @return
     */
    public static double mul(double v1, double v2, int scale) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return round(b1.multiply(b2).doubleValue(), scale);
    }

    /**
     * double/double
     *
     * @param v1    被除数
     * @param v2    除数
     * @param scale
     * @return
     */
    public static double div(double v1, double v2, int scale) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); //ROUND_HALF_UP:四舍五入
    }

    /**
     * double比较大小：当此 BigDecimal 在数字上小于、等于或大于 val 时，返回 -1、0 或 1。
     *
     * @param num1
     * @param num2
     * @return
     */
    public static int checkDouble(double num1, double num2) {
        BigDecimal data1 = new BigDecimal(num1);
        BigDecimal data2 = new BigDecimal(num2);
        int i = data1.compareTo(data2);
        System.out.println("比对结果：" + i);
        return i;
    }

    //71.20000000000002
    public static void main(String[] args) {
        System.out.println(mul(80.09, 1245.68, 2) + "----------" + 80.09 * 1245.68);
    }
}
